const db = require('../db/index.js')
//导入加密中间件
const bcrypt = require('bcryptjs')
//导入node.js的crypto库生成uuid
const crypto = require('crypto')
//处理文件路径
fs = require('fs')

//上传头像接口
exports.uploadAvatar = (req, res) => {
	//生成唯一标识
	const onlyId = crypto.randomUUID()
	let oldName = req.files[0].filename;
	let newName = Buffer.from(req.files[0].originalname, 'latin1').toString('utf8')
	fs.renameSync('./public/upload/' + oldName, './public/upload/' + newName)
	const sql = 'insert into image set ?'
	db.query(sql, {
		image_url: `http://127.0.0.1:3007/upload/${newName}`,
		onlyId
	}, (err, result) => {
		if (err) return res.cc(err)
		res.send({
			onlyId,
			status: 0,
			url: 'http://127.0.0.1:3007/upload/' + newName
		})
	})
}

//绑定账号接口 需从前端接受3个参数 onlyId  account url
exports.bindAccount = (req, res) => {
	const {
		account,
		onlyId,
		url
	} = req.body
	const sql = 'update image set account = ? where onlyId =?'
	db.query(sql, [account, onlyId], (err, result) => {
		if (err) return res.cc(err)
		if (result.affectedRows == 1) {
			const sql1 = 'update users set image_url = ? where account = ?'
			db.query(sql1, [url, account], (err, result) => {
				if (err) return res.cc(err)
				res.send({
					status: 0,
					message: '修改成功',
				})
			})
		}
	})
}

//修改用户密码 先输入旧密码oldPassword,新密码newPassword，通过id找到旧密码
exports.changePassword = (req, res) => {
	const sql = 'select password from users where id = ?'
	db.query(sql, req.body.id, (err, result) => {
		if (err) return res.cc(err)
		const compareResult = bcrypt.compareSync(req.body.oldPassword, result[0].password)
		if (!compareResult) {
			res.send({
				status: 1,
				message: '原密码错误',
			})
		}
		req.body.newPassword = bcrypt.hashSync(req.body.newPassword, 10)
		const sql1 = 'update users set password = ? where id = ?'
		db.query(sql1, [req.body.newPassword, req.body.id], (err, result) => {
			if (err) return res.cc(err)
			res.send({
				status: 0,
				message: '修改成功',
			})
		})
	})

}


//获取用户信息  接收参数id
exports.getUserInfo = (req, res) => {
	const sql = 'select * from users where id=?'
	db.query(sql, req.body.id, (err, result) => {
		if (err) return res.cc(err)
		result[0].password = ''
		res.send(result[0])
	})

}

//修改姓名 接收参数id name
exports.changeName = (req, res) => {
	const {
		id,
		name
	} = req.body
	const sql = 'update users set name = ? where id = ?'
	db.query(sql, [name, id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '修改成功',
		})
	})

}

//修改性别 接收参数id sex
exports.changeSex = (req, res) => {
	const {
		id,
		sex
	} = req.body
	const sql = 'update users set sex = ? where id = ?'
	db.query(sql, [sex, id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '修改成功',
		})
	})

}

//修改邮箱 接收参数id email
exports.changeEmail = (req, res) => {
	const {
		id,
		email
	} = req.body
	const sql = 'update users set email = ? where id = ?'
	db.query(sql, [email, id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '修改成功',
		})
	})

}

//验证账号和邮箱是否一致 email account
exports.verifyAccountAndEmail = (req, res) => {
	const {
		account,
		email
	} = req.body
	const sql = 'select * from users where account=?'
	db.query(sql, account, (err, result) => {
		if (err) return res.cc(err)
		//res.send(result[0])
		if (email == result[0].email) {
			res.send({
				status: 0,
				message: '邮箱查询成功',
				id: result[0].id,
			})
		} else {
			res.send({
				status: 1,
				message: '邮箱查询失败',
			})
		}
	})
}

//登录页面修改密码接口 参数newPassword id
exports.changePasswordInLogin = (req, res) => {
	const user = req.body
	user.newPassword = bcrypt.hashSync(user.newPassword, 10)
	const sql = 'update users set password=? where id=?'
	db.query(sql, [user.newPassword, user.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '更新成功',
		})
	})
}



//----------------用户管理-----------
//新增管理员
exports.createAdim = (req, res) => {
	//从body中获取下拉属性的信息
	const {
		account,
		password,
		name,
		sex,
		department,
		email,
		identity
	} = req.body
	//第二步 判断前端传过来的账号在数据表中是否存在
	const sql = 'select * from users where account=?'
	db.query(sql, account, (err, results) => {
		if (results.length > 0) {
			return res.send({
				status: 1,
				message: '账号已经存在',
			})
		}
		const hashpassword = bcrypt.hashSync(password, 10)
		const sql1 = 'insert into users set ?'

		//创建时间
		const create_time = new Date()
		db.query(sql1, {
			account,
			password: hashpassword,
			name,
			sex,
			department,
			email,
			identity,
			create_time,
			status: 0,

		}, (err, results) => {
			//第一个插入失败   affectedRows影响的行数
			if (results.affectedRows !== 1) {
				return res.send({
					status: 1,
					message: '添加管理员账号失败',
				})
			}
			res.send({
				status: 0,
				message: '添加管理员账号成功',
			})
		})

	})
}

//获取管理员列表的接口  参数是identity
exports.getAdimList = (req, res) => {
	const sql = 'select * from users where identity=?'
	db.query(sql, req.body.identity, (err, result) => {
		if (err) return res.cc(err)
		result.forEach((e) => {
			e.password = ''
			e.create_time = ''
			e.image_url = ''
			e.status = ''
		})
		res.send(result)
	})

}


//编辑管理员账号信息的接口  
exports.editAdim = (req, res) => {
	const {
		id,
		name,
		sex,
		email,
		department
	} = req.body
	const date = new Date()
	//修改的内容
	const updateContent = {
		id,
		name,
		sex,
		email,
		department,
		update_time: date,
	}
	const sql = 'update users set ? where id=?'
	db.query(sql, [updateContent, updateContent.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '修改管理员信息成功',
		})
	})

}


//管理员权限降级的接口   参数是id
exports.changeIdentityToUser = (req, res) => {
	const identity = '用户'
	const sql = 'update users set identity =? where id=?'
	db.query(sql, [identity, req.body.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '管理员权限降级成功',
		})
	})

}

//对用户进行赋权的接口   参数是id  identity
exports.changeIdentityToAdmin = (req, res) => {
	const date = new Date()
	const sql = 'update users set identity =? , update_time=? where id=?'
	db.query(sql, [req.body.identity, date, req.body.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '用户赋权成功',
		})
	})

}

//通过账号对用户进行搜索的接口  参数account
exports.searchUser = (req, res) => {
	const sql = 'select * from users where account=?'
	db.query(sql, req.body.account, (err, result) => {
		if (err) return res.cc(err)
		result.forEach((e) => {
			e.password = ''
			e.create_time = ''
			e.image_url = ''
			e.status = ''
		})
		res.send(result)
	})

}


//通过部门对用户进行搜索的接口  参数department
exports.searchDepartment = (req, res) => {
	const sql = 'select * from users where department = ? and identity= "用户" '
	db.query(sql, req.body.department, (err, result) => {
		if (err) return res.cc(err)
		result.forEach((e) => {
			e.password = ''
			// e.create_time=''
			e.image_url = ''
			// e.status=''
		})
		res.send(result)
	})

}

//冻结用户账号 通过id 把status置为1
exports.banUser = (req, res) => {
	const status = 1
	const sql = 'update users set status =? where id=?'
	db.query(sql, [status, req.body.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '冻结用户账号成功',
		})
	})

}

//解冻用户账号   通过id 把status置为0
exports.hotUser = (req, res) => {
	const status = 0
	const sql = 'update users set status =? where id=?'
	db.query(sql, [status, req.body.id], (err, result) => {
		if (err) return res.cc(err)
		res.send({
			status: 0,
			message: '解冻用户账号成功',
		})
	})
}

//获取冻结用户列表
exports.getBanList = (req, res) => {
	const sql = 'select * from users where status="1" '
	db.query(sql, (err, result) => {
		if (err) return res.cc(err)
		res.send(result)
	})
}

//删除用户的接口  参数id   account
exports.deleteUser = (req, res) => {
	const sql = 'delete from users where id=? '
	db.query(sql, req.body.id, (err, result) => {
		if (err) return res.cc(err)
		const sql1 = 'delete from image where account=?'
		db.query(sql1, req.body.id, (err, result) => {
			if (err) return res.cc(err)
			res.send({
				status: 0,
				message: '删除用户账号成功',
			})
		})

	})
}

//获取对应身份的总人数  参数 identity
exports.getAdminListLength = (req, res) => {
	const sql = 'select * from users where identity=? '
	db.query(sql, req.body.identity, (err, result) => {
		if (err) return res.cc(err)
		res.send({
			length: result.length
		})
	})
}

//监听换页 返回数据 参数是页码 pager  identity
exports.returnListData = (req, res) => {
	const number = (req.body.pager - 1) * 10
	const sql = `select * from users where identity=? limit 10 offset ${number}`
	db.query(sql, req.body.identity, (err, result) => {
		if (err) return res.cc(err)
		res.send(result)
	})
}